21 06 2021

class: inverse, center, middle

gganimate nedir?


  • R’da animasyonlu grafikler oluşturmak için ggplot2 paketinin bir uzantısıdır.
  • Orijinali David Robinson tarafından yazılmıştır.
  • Thomas Lin Pedersen tarafından 2018 ve 2019’da güncellenmiştir.

Pedersen gganimate paketini şöyle tanımlıyor:

Animasyonun nasıl tanımlanacağına dair teorik bir omurga ve aynı zamanda belirlenmiş teorik omurgaların bir uygulamasıdır.

Animasyonların yapısı


Grafik hareketlerini aşağıdaki özelliklerle kontrol etme

  • Transitions ~ Geçişler
  • Views ~ Görüntülemeler
  • Shadows ~ Gölgeler
  • Entrances/Exits ~ Girişler/Çıkışlar
  • Easing ~ Hafifletme

Transitions ~ Geçişler


  • Verilerin nasıl yayılması gerektiğini ve zaman içinde kendisiyle nasıl ilişkili olduğunu tanımlar.
Fonksiyon Tanım
transition_manual Doğrudan çerçeve üyeliğini belirterek bir animasyon oluşturma
transition_states Verilerin birkaç farklı aşaması arasında geçiş
transition_time Zaman içinde farklı durumlar arasında geçiş
transition_components Grafik bileşenlerini kendi yaşam döngüleri boyunca geçiş
transition_reveal Belirli bir boyut boyunca verileri ortaya çıkarma
transition_layers Grafiğe katmanlar ekleme
transition_filter Farklı filtreler arasında geçiş
transition_events Bireysel olayları içeri ve dışarı aktarın
transation_null Animasyon boyunca tüm verileri sabit tutma

Statik arsa


ggplot(gapminder, 
       aes(x = gdpPercap, y=lifeExp, size = pop, colour = country) ) +
  geom_point(show.legend = FALSE, alpha = 0.7) +
  scale_x_log10() +
  scale_color_viridis_d() +
  scale_size(range = c(0.1, 5)) +
  labs(x = "GDP per capita", y = "Life expectancy")

transition_time()

p + transition_time(year) +
  labs(title = "Year: {frame_time}")

p + facet_wrap(~continent) +
  transition_time(year) +
  labs(title = "Year: {frame_time}")

transition_states()

ggplot(iris, aes(x = Petal.Width, y = Petal.Length, colour = Species)) + 
  geom_point(aes(group = seq_along(Species))) + 
  transition_states(Species,
                    transition_length = 2,
                    state_length = 1)

transition_reveal()

ggplot(
  airquality,
  aes(Day, Temp, group = Month, color = factor(Month))) +
  geom_line() +
  scale_color_viridis_d() +
  labs(x = "Day of Month", y = "Temperature") +
  theme(legend.position = "top")+ 
  geom_point(aes(group = seq_along(Day))) +
  transition_reveal(Day) +
  theme_minimal()

Views ~ Görüntülemeler


  • Animasyon boyunca konumsal ölçeklerin nasıl değişmesi gerektiğini tanımlar.
Fonksiyon Tanım
view_follow Geçerli veri aralığını takip etmek için görünümü değiştirme
view_step Görünümün geçişler arasında statik olması dışında view_follow’a benzer
view_step_manual view_step ile aynı, ancak görünüm aralıkları manuel olarak tanımlanır
view_zoom view_step’e benzer, ancak önce uzaklaştırıp sonra yakınlaştırınca daha yumuşak görünür
view_zoom_manual Görünüm aralıklarının manuel olarak tanımlanması dışında view_zoom ile aynı

view_follow()

p + transition_time(year) +
  labs(title = "Year: {frame_time}") +
  view_follow(fixed_y = TRUE)

ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point() +
  labs(title = "{closest_state}") +
  transition_states(Species, transition_length = 4, state_length = 1) +
  view_follow()

Shadows ~ Gölgeler


  • Zaman içindeki diğer noktalardan gelen verilerin verilen zaman noktasında nasıl sunulması gerektiğini tanımlar.
Fonksiyon Tanım
shadow_mark Önceki (ve/veya gelecekteki) çerçeveler kalıcı arka plan işaretleri bırakır
shadow_trail İşaretlerin arası doldurulmuş verilerden alınması dışında shadow_mark’a benzer
shadow_wake Zamanla boyutu (ve/veya donukluk) içinde azalan bir gölge gösterir

shadow_wake()

p + transition_time(year) +
  labs(title = "Year: {frame_time}") +
  shadow_wake(wake_length = 0.1, alpha = FALSE)

ggplot(iris, aes(Petal.Length, Sepal.Length)) +
  geom_point(size = 2) +
  labs(title = "{closest_state}") +
  transition_states(Species, transition_length = 4, state_length = 1) +
  shadow_wake(wake_length = 0.1)

shadow_mark()

p + transition_time(year) +
  labs(title = "Year: {frame_time}") +
  shadow_mark(alpha = 0.3, size = 0.9)

p1 + transition_states(Month, wrap = FALSE) +
  shadow_mark()

Entrances and exits ~ Girişler/Çıkışlar


  • Animasyon sırasında yeni verilerin nasıl görüneceğini ve ne kadar eski verilerin kaybolacağını tanımlar.
Fonksiyon Tanım
enter_appear/exit_disappear Anında görünür veya kaybolur
enter_fade/exit_fade Opaklık, öğeleri soldurmak veya azaltmak için kullanılır
enter_grow/exit_shrink Element boyutu sıfırdan büyüyecek veya sıfıra küçülecek
enter_recolour/exit_recolour Arka plana karışmak için element renklerini değiştirin
enter_fly/exit_fly Elementler belirli bir x,y konumundan/belirli konuma hareket edecektir.
enter_drift/exit_drift Elementler göreli olarak x,y konumlarından-konumlarına kayacaktır
enter_reset/exit_reset Önceden eklenmiş tüm giriş/çıkışları temizler

p1 + transition_states(Month, wrap = FALSE) +
  shadow_mark() +
  enter_grow() +
  enter_fade()

p3 + 
  enter_fade() + enter_drift(x_mod = -1) + 
  exit_shrink() + exit_drift(x_mod = 5)

gganimate’in diğer fonksiyonları


Fonksiyon Tanım
animate() Bir gganim nesnesini alır ve onu bir animasyona dönüştürür.
anim_save() Animasyonu bir dosyaya kaydetmeyi sağlar.
frame_vars() Animasyondaki karelerle ilgili meta verilere erişmeyi sağlar.
split_animation() Animasyonu parçalara ayırmayı sağlar.
ease_aes() Geçişler sırasında farklı estetiğin nasıl hafifletilmesi gerektiğini tanımlar.
*_renderer() Yukarıdaki işlevler kullanılarak belirtilen animasyonun oluşturulmasını kontrol etmemizi sağlar.

animate(p3+
          enter_fade()+
          exit_fly(y_loc = 1),
        renderer = gifski_renderer())

animate(p3 + ease_aes(x = 'bounce-out') + enter_fly(x_loc = -1) +
          exit_fade(),  width = 600, height = 400, res = 100)

data %>%
  ggplot() +
  geom_col(aes(ranking, gdpPercap, fill = country)) +
  #geom_text(aes(ranking, gdpPercap, label = gdpPercap), hjust=-0.1) +
  geom_text(aes(ranking, y=0 , label = country), hjust=1.1) + 
  geom_text(aes(x=15, y=max(gdpPercap) , label = as.factor(year)), 
            vjust = 0.1, alpha = 0.1,  col = "gray", size = 3) +
  coord_flip(clip = "off", expand = FALSE) + scale_x_reverse() +
  theme_minimal() + 
  theme(panel.grid = element_blank(), 
    legend.position = "none",
    axis.ticks.y = element_blank(),
    axis.title.y = element_blank(),
    axis.text.y = element_blank(),
    plot.margin = margin(1, 4, 1, 3, "cm")) +
  transition_states(year, state_length = 0, transition_length = 2) +
  enter_fade() +
  exit_fade() + 
  ease_aes('quadratic-in-out') 

Kaynak

Beni Dinlediğiniz İçin Teşekkürler ☺